//package algorithm.leetcode.array;
//
//import org.apache.logging.log4j.util.Strings;
//
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * @auther zhouliangliang
// * @date 2022/10/9 11:08
// * @description
// */
//public class SpiralOutArrayTwo {
//
//    public List<Integer> spiralOrder(int[][] matrix) {
//        //多少行
//        int line = matrix.length;
//        //多少列
//        int column = matrix[0].length;
//        //元素个数
//        int total = line * column;
//        //最左侧元素的列下标
//        int left = 0;
//        //最右侧元素的列下标
//        int right = column -1;
//        //最上侧元素的行下标
//        int top = 0;
//        //最下侧元素的行下标
//        int bottom = line -1;
//
//        List<Integer> list = new ArrayList<>();
//
//        //左右交叠或者上下交叠的时候退出
//        while (true) {//index <= total
//            //从左到右输出上侧行的元素，行不变，列递增
//            for(int i=left; i<=right; i++) {
//                list.add(matrix[top][i]);
//            }
//            top = top + 1; //已经输出过最上侧行了
//            if(top > bottom) {
//                break;
//            }
//
//            //从上到下输出右侧列的元素，列不变，行递增
//            for(int i=top; i<=bottom; i++) {
//                list.add(matrix[i][right]);
//            }
//            right = right - 1; //已经输出过最右侧列了
//            if(left > right) {
//                break;
//            }
//
//            //从右到左输出下侧行的元素，行不变，列递减
//            for(int i=right; i>= left; i--) {
//                list.add(matrix[bottom][i]);
//            }
//            bottom = bottom -1; //已经输出过最下侧行了
//            if(top > bottom) {
//                break;
//            }
//
//
//            //从下到上输出最左侧列的元素，列不变，行递减
//            for(int i=bottom; i>=top; i--) {
//                list.add(matrix[i][left]);
//            }
//            left = left + 1;//已经输出过最左侧列了
//            if(left > right) {
//                break;
//            }
//        }
//        return list;
//    }
//
//    public static void main(String[] args) {
////        int[][] array = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
//        int[][] array = new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
//        List<Integer> list = new SpiralOutArrayTwo().spiralOrder(array);
//        System.out.println(Strings.join(list, ','));
//    }
//}
